home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
CU Amiga Super CD-ROM 11
/
CU Amiga Magazine's Super CD-ROM 11 (1997)(EMAP Images)(GB)(Track 1 of 3)[!][issue 1997-06].iso
/
cucd
/
programming
/
oberonv4
/
source
/
system
/
hostsys.mod
(
.txt
)
< prev
next >
Wrap
Oberon Text
|
1996-08-11
|
3KB
|
95 lines
Syntax10.Scn.Fnt
Syntax10b.Scn.Fnt
ParcElems
Alloc
MODULE HostSYS; (** RD 26-May-96*)
IMPORT AmigaDos;
CONST
BigEndianMachine*=TRUE; (* 680x0 is big endian, i386 is little endian *)
Array which maps a character in the Oberon character set into a character in the host character set.
inverseMapping:ARRAY 256 OF CHAR;
Array which maps a character in the host character set into a character in the Oberon character set.
mapping:ARRAY 256 OF CHAR;
PROCEDURE StdOut*(str: ARRAY OF CHAR; len: LONGINT);
BEGIN
IF AmigaDos.Write(AmigaDos.Output(),str,len)=1 THEN END
END StdOut;
PROCEDURE IsNameChar1*(ch:CHAR):BOOLEAN; (* Is ch valid for first character of a name name? *)
BEGIN
RETURN (('A'<=ch) & (ch<='Z'))
OR (('a'<=ch) & (ch<='z'))
OR (ch='.')
OR (ch='/')
END IsNameChar1;
PROCEDURE IsNameChar*(ch:CHAR):BOOLEAN; (* Is ch valid for second to last character of a name? *)
BEGIN
RETURN (('A'<=ch) & (ch<='Z'))
OR (('a'<=ch) & (ch<='z'))
OR (('0'<=ch) & (ch<='9'))
OR (ch='.')
OR (ch='/')
OR (ch=':')
OR (ch='_')
END IsNameChar;
PROCEDURE toHost*(ch:CHAR):CHAR; (* Convert charcter from host char set to Oberon char set *)
BEGIN
RETURN inverseMapping[ORD(ch)]
END toHost;
PROCEDURE toOberon*(ch:CHAR):CHAR; (* Convert charcter from host char set to Oberon char set *)
BEGIN
RETURN mapping[ORD(ch)]
END toOberon;
PROCEDURE makeMapping(ch1,ch2:CHAR);
ch:CHAR;
BEGIN
IF mapping[ORD(ch1)]#ch2 THEN (* other mappings caused this to be already ok. *)
IF mapping[ORD(ch2)]#ch2 THEN (* was already substituted. Search for new location of ch2. *)
ch:=mapping[ORD(ch2)];
WHILE mapping[ORD(ch)]#ch2 DO ch:=mapping[ORD(ch)] END;
ch2:=ch
END;
mapping[ORD(ch2)]:=mapping[ORD(ch1)];
mapping[ORD(ch1)]:=ch2
END makeMapping;
PROCEDURE initMapping;
i:INTEGER;
BEGIN
FOR i:=0 TO 0FFH DO mapping[i]:=CHR(i) END
END initMapping;
PROCEDURE createInverseMapping;
i:INTEGER;
BEGIN
FOR i:=0 TO 0FFH DO
inverseMapping[ORD(mapping[i])]:=CHR(i)
END createInverseMapping;
BEGIN
initMapping;
makeMapping( 00DX,00AX);
makeMapping( 0C4X,"
makeMapping( 0D6X,"
makeMapping( 0DCX,"
makeMapping( 0E4X,"
makeMapping( 0EBX,"
makeMapping( 0EFX,"
makeMapping( 0F6X,"
makeMapping( 0FCX,"
makeMapping( 0E2X,"
makeMapping( 0EAX,"
makeMapping( 0EEX,"
makeMapping( 0F4X,"
makeMapping( 0FBX,"
makeMapping( 0E0X,"
makeMapping( 0E8X,"
makeMapping( 0ECX,"
makeMapping( 0F2X,"
makeMapping( 0F9X,"
makeMapping( 0E1X,"
makeMapping( 0E9X,"
makeMapping( 0E7X,"
makeMapping( 0F1X,"
makeMapping( 0DFX,"
createInverseMapping
END HostSYS.
Date Author Modification
1996-08-11 degner@pallas.amp.uni-hannover.de Created first AMIGA version.